package com.zhuiyun.project.api.products.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zhuiyun.project.api.products.product.vo.ProductSortVo;
import com.zhuiyun.project.api.products.product.entity.Product;
import com.zhuiyun.project.common.errorCode.CommonException;
import com.zhuiyun.project.common.response.CommonResult;
import com.zhuiyun.project.utils.pageUtil.PageRequest;
import com.zhuiyun.project.utils.pageUtil.PageResult;

import java.util.List;

/**
 * @ClassName ProductService
 * @Description TODO 商品接口
 * @Author ypq
 * @Date 2023/10/25 16:44
 **/
public interface ProductService extends IService<Product> {

    /**
    * @Author ypq
    * @Description 查询商品
    * @Date 2023/10/25 19:07
    * @Return PageResult
    * @param pageRequest
    * @param productVo
    */
    PageResult listProductByPages(PageRequest pageRequest, ProductSortVo productVo);

    /**
    * @Author ypq
    * @Description 新增商品
    * @Date 2023/10/26 16:32
    * @Return CommonResult
    * @param productSortVo
    */
    CommonResult addProduct(ProductSortVo productSortVo) throws CommonException;

    /**
     * @Author ypq
     * @Description 修改商品
     * @Date 2023/10/26 16:32
     * @Return CommonResult
     * @param productSortVo
     */
    CommonResult editProduct(ProductSortVo productSortVo) throws CommonException;

    /**
    * @Author ypq
    * @Description 下架商品
    * @Date 2023/10/26 16:52
    * @Return int
    * @param product
    */
    int downProduct(Product product);

    /**
    * @Author ypq
    * @Description 根据商品编号获取信息
    * @Date 2023/10/26 19:32
    * @Return ProductSortVo
    * @param productId
    */
    ProductSortVo getProductById(Long productId);

    /**
     * @Author ypq
     * @Description 根据分类id查询商品
     * @Date 2023/10/25 19:34
     * @Return List<List<ProductSortVo>>
     * @param productVo
     */
    List<List<ProductSortVo>> listProducts(ProductSortVo productVo);

    /**
    * @Author ypq
    * @Description 搜索商品
    * @Date 2023/11/14 14:08
    * @Return  List<ProductSortVo>
    * @param productVo
    */
    List<ProductSortVo> listProductByNames(ProductSortVo productVo);
}
